package com.niuke;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

/**
 * 19. 数据最节约的备份方法
 * 有若干个文件，使用刻录光盘的方式进行备份，假设每张光盘的容量是500MB，求使用光盘最少的文件分布方式所有文件的大小都是整数的MB，且不超过500MB;
 * 文件不能分割、分卷打包
 * https://blog.csdn.net/2301_78482949/article/details/131308886
 */
public class NiukeMoni19 {

    public static int maxSize = 500;

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        String[] input = scanner.nextLine().split(" ");
        int[] fileSize = new int[input.length];
        for (int i = 0; i < input.length; i++) {
            fileSize[i] = Integer.parseInt(input[i]);
        }

        Arrays.sort(fileSize);


        List<Integer> index = new ArrayList<>(); // 存储已经被拼凑存储的下标
        int res = 0;
        for (int i = fileSize.length - 1; i >= 0; i--) {
            if (fileSize[i] > maxSize || index.contains(i)) {
                continue;
            }
            if (fileSize[i] == maxSize) {
                res++;
                continue;
            }

            int tempSize = fileSize[i];
            for (int j = i - 1; j >= 0; j--) {
                if (tempSize + fileSize[j] == 500) {
                    index.add(j);
                    break;
                }
                if (tempSize + fileSize[j] < 500) {
                    tempSize = tempSize + fileSize[j];
                    index.add(j);
                }
            }
            res++;

        }

        System.out.println(res);

    }

}
